package model;

import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.LinkedList;

public class Czlowiek extends Model {

	private long id;

	public long getId() {
		return id;
	}

	public CzlowiekBean get() throws SQLException {
		PreparedStatement p = getConnection()
				.prepareStatement(
						"select imie,nazwisko,bio,data_smierci,data_urodzenia,id from CZLOWIEK where id  = ? ");
		p.setLong(1, id);
		ResultSet r = p.executeQuery();
		if (r != null && r.next()){
			CzlowiekBean c = new CzlowiekBean(r.getString(1), r.getString(2), r
					.getString(3), r.getDate(4), r.getDate(5), r.getLong(6));
			r.close();
			p.close();		
			return c;
		}else{
			r.close();
			p.close();
			return null;
		}
	}

	public Czlowiek(long _id) {
		id = _id;
	}

	public void delete() throws SQLException{
		PreparedStatement p = getConnection().prepareStatement(
				"delete from CZLOWIEK where id = ?");
		p.setLong(1,id);
		p.executeUpdate();
		p.close();	
	}
	
	static public Collection<CzlowiekBean> getLista() throws SQLException {
		PreparedStatement p = getConnection()
				.prepareStatement(
						"select imie,nazwisko,bio,data_smierci,data_urodzenia,id from CZLOWIEK");
		ResultSet r = p.executeQuery();
		LinkedList<CzlowiekBean> out = new LinkedList<CzlowiekBean>();
		while (r.next()) { // kolejnosc:
							// imie,nazwisko,bio,data_smierci,data_urodzenia,id
			out.add(new CzlowiekBean(r.getString(1), r.getString(2), r
					.getString(3), r.getDate(4), r.getDate(5), r.getLong(6)));
		}
		r.close();
		p.close();
		return out;
	}

	public Collection<ObsadaBean> getObsada() throws SQLException {
		PreparedStatement p = getConnection().prepareStatement(
				"select	czlowiek.imie imie,						"
						+ "		czlowiek.id autorId,					"
						+ "		film.id film_id,						"
						+ "		obsadzil.stanowisko_id rolaId,			"
						+ "		stanowisko.nazwa rola,					"
						+ "		film.tytul tytulFilmu,					"
						+ "		czlowiek.nazwisko nazwisko,				"
						+ "		obsadzil.id id							"
						+ "from	obsadzil, stanowisko, czlowiek, film 	"
						+ "where obsadzil.stanowisko_id = stanowisko.id	"
						+ "	and	obsadzil.czlowiek_id = czlowiek.id		"
						+ "	and	obsadzil.film_id = film.id				"
						+ "	and	obsadzil.czlowiek_id  = ? ");
		p.setLong(1, id);
		ResultSet r = p.executeQuery();
		LinkedList<ObsadaBean> out = new LinkedList<ObsadaBean>();
		while (r.next()) { // kolejność:
							// imie,autorId,film_id,rolaId,rola,tytulFilmu,nazwisko,id
			out.add(new ObsadaBean(r.getString(1), r.getLong(2), r.getLong(3),
					r.getLong(4), r.getString(5), r.getString(6),
					r.getString(7), r.getLong(8)));
		}
		r.close();
		p.close();
		return out;
	}

	public Czlowiek(String imie, String nazwisko, Date ur, Date zm, String bio)
			throws SQLException {
		id = getNextSequence("seq_Czlowiek");
		PreparedStatement p = getConnection().prepareStatement(
				"insert into Czlowiek(id, imie, nazwisko,data_urodzenia,data_smierci,bio)"
						+ "values(?, ?, ?, ?, ?, ?)");
		p.setLong(1, id);
		p.setString(2, imie);
		p.setString(3, nazwisko);
		p.setDate(4, ur);
		p.setDate(5, zm);
		p.setClob(6, makeClob(bio));
		p.executeUpdate();
		p.close();
	}

	public void edytuj(String imie, String nazwisko, Date ur, Date zm,
			String bio) throws SQLException {
		PreparedStatement p = getConnection().prepareStatement(
				"UPDATE  Czlowiek SET	" +
				"	imie = ?,			" +
				"	nazwisko = ?,		" +
				"	data_urodzenia = ?,	" +
				"	data_smierci = ?,	" +
				"	bio = ?				" +
				"WHERE id = ?			");
		p.setString(1, imie);
		p.setString(2, nazwisko);
		p.setDate(3, ur);
		p.setDate(4, zm);
		p.setClob(5, makeClob(bio));
		p.setLong(6, id);
		p.executeUpdate();
		p.close();
	}
	public void edytuj(CzlowiekBean bean) throws SQLException {
		assert bean.getId() == id;
		PreparedStatement p = getConnection().prepareStatement(
				"UPDATE  Czlowiek SET	" +
				"	imie = ?,			" +
				"	nazwisko = ?,		" +
				"	data_urodzenia = ?,	" +
				"	data_smierci = ?,	" +
				"	bio = ?				" +
				"WHERE id = ?			");
		p.setString(1, bean.getImie());
		p.setString(2, bean.getNazwisko());
		p.setDate(3, bean.getData_urodzenia());
		p.setDate(4, bean.getData_smierci());
		p.setClob(5, makeClob(bean.getBio()));
		p.setLong(6, id);
		p.executeUpdate();
		p.close();
	}
}
